<?php
	/** sous fonctionnalité de gestion des joueurs d'un matche
	 * @author Sebastian Mosser
	 */

class sfManagePlayers extends aSubFeature {


	public function __construct() {
		  $this->_acl = new AccessControlList(); 
      $this->_acl->setGranted(1, AccessControlList::$JUST_ME); // Entraineur
      $this->_acl->setGranted(3); // Secretariat
      $this->_acl->setGranted(7); // Administrateur système
		}


	public function check($teamId) {
	
		$perm = $this->_acl->isExposable(Login::getGroups());
		$aTeam = Team::read($teamId);
		
		if ($perm == AccessControlList::$JUST_ME) {
			if (! $aTeam->canEdit(Login::getLoginId())) {
				$page = <<<EOS
<h1> Une erreur est survenue ! </h1>
<div align="center">
<p> <span class="error">Vous n'êtes pas autorisé a faire des modifications dans cette équipe car vous n'en êtes pas l'administrateur.</span></p>
</div>
<p> Si vous pensez qu'il s'agit d'une erreur, contactez le secrétariat du club qui pourra vous autoriser à y acceder.</p>
<p> Pour pouvoir modifier une équipe, vous devez être déclaré : 
<ul>
  <li> Administrateur de l'équipe </li>
  <li> Administrateur de catégorie </li>
  <li> Membre du groupe <code> Secretariat </li>
  <li> Membre du groupe <code> Administrateur Système </code> </li>
</ul>
EOS;
				return $page;
			}
		}
		return True;
	}

	protected function run() {
		
		$id = PropRetriever::getProp($_POST,"id");
		if ($id == "")
			$id = PropRetriever::getProp($_GET,"id");
		
		try {
			$aMatche = Matche::read($id);
			$teamId = $aMatche->getTeamId();
		}
		catch(Exception $e) {
			$ans  = "<h1> Une erreur est survenue ! </h1>";
			$ans .= "<div align=\"center\"> <span class=\"error\">";
			$ans .= "Le match demandé n'existe pas !";
			$ans .= "</span></div>";
			return $ans;
		}
		
		$c = $this->check($teamId);
		if ($c === True)
			return $this->process($aMatche,$id);
		else
			return $c;
	}
	
	// $aMatche est une instance de Matche, mais pas une rèf.
	private function process($aMatche,$id) {
		$action = PropRetriever::getProp($_POST,"action");
		if ($action == "add")
			return $this->addPlayerInMatche($aMatche, $id);
		else if ($action == "edit")
			return $this->editPlayerInMatche($aMatche,$id);
		else if ($action == "delete")
			return $this->deletePlayerInMatche($aMatche,$id);
		else
			return $this->displayform($aMatche,$id);
	}
	
	private function editPlayerInMatche($aMatche,$id) {
		$memberId = PropRetriever::getProp($_POST,"memberId");
		$roleId = PropRetriever::getProp($_POST,"role");
		$markId = PropRetriever::getProp($_POST,"mark");
		$gameTime = PropRetriever::getProp($_POST,"gameTime");
		$aMatche->addPlayer($memberId,$roleId,$markId,$gameTime);
		$aMatche->update();
		return $this->displayForm($aMatche,$id,
															"Modification effectuée avec succès");
	
	}
	
	private function deletePlayerInMatche($aMatche, $id) {
		$memberId = PropRetriever::getProp($_POST,"memberId");
		$aMatche->delPlayer($memberId);
		$aMatche->update();
		return $this->displayForm($aMatche,$id,
															"Supression effectuée avec succès !");
	}
	
	// $aMatche est une instance de matche 
	private function addPlayerInMatche($aMatche, $id) {
		$memberLicence = PropRetriever::getProp($_POST,"licence");
		try {
			$memberId = Member::getOnLicence($memberLicence);
			if ($memberId == 0)
				throw new Exception("unknown licence",1);
		}
		catch(Exception $e) {
			return $this->displayForm($aMatche,$id,
																"Licence [$memberLicence] Inconnue !");
		}
		$aMatche->addPlayer($memberId,-1,-1,0);
		$aMatche->update();
		return $this->displayForm($aMatche, $id, "Ajout effectué avec succès");
	}
	
	private function displayForm($aMatche,$id,$text = "") {
		$matcheResume = $aMatche->displayShort();
		
		
		$playersFormContent = "";
		$players = $aMatche->getPlayers();
		$playersArray = array();
		foreach ($players as $k => $v) {
			// recuperation des infos
			$aMember = Member::read($k);
			$name = $aMember->displayName();
			$licence = $aMember->getLicenceNo();
			$roleId = $v["role"];
			$mark = $v["mark"];
			$gameTime = $v["gameTime"];
			$roleOptions = Matche::getRolesAsList($roleId);
			$markOptions = Matche::getMarkAsList($mark);
			
			// construction du formulaire :
			$playersArray[$name] = <<<EOS
<tr>
  <form method="post" action="#${k}">
  <input type="hidden" name="id" value="$id" />
  <input type="hidden" name="action" value="edit" />
  <input type="hidden" name="memberId" value="$k" />
  <td id="${k}"> <code> $licence </code> </td> <td> $name </td> 
  <td> <select name="role" class="edit"> $roleOptions </select> </td>
  <td> <select name="mark" class="edit"> $markOptions </select> </td>
  <td> <input type="text" name="gameTime" value="${gameTime}" /> </td>
  <td> <input type="submit" class="edit" value="Modifier" /> </td>
  </form>
  <form method="post">
  <input type="hidden" name="id" value="$id" />
  <input type="hidden" name="action" value="delete" />
  <input type="hidden" name="memberId" value="$k" />
  <td> <input type="submit" class="edit" value="Supprimer" /> </td>
  </form>
</tr>
EOS;
		}
		ksort($playersArray);
		foreach($playersArray as $k => $v) {
			$playersFormContent .= $v; 
		}
		
		$playersForm = "";
		if ($playersFormContent != "") {
			$playersForm = <<<EOS
<div align="center">
<table class="resultset">
<tr> 
	<th> Licence </th> <th> Nom </th> <th> Poste Principal</th> 
	<th> Notation </th> <th> Temps de Jeu </th> <th colspan="2"> Actions </th>
</tr>
${playersFormContent}
</table>
</div>
EOS;
		}
		else {
			$playersForm = <<<EOS
<div align="center">
<span class="error"> Aucun joueur sur ce matche ! </span>
</div>
EOS;
		}
		
		$resultAction = "";
		if ($text != "") {
			$resultAction = "<h2> Résultat de l'action demandée </h2>";
			$resultAction .= "<div align=\"center\"><span class=\"error\">";
			$resultAction .= $text;
			$resultAction .= "</span></div>";
		}
		
		$returnButton = sfManageAMatche::getReturnButton($id);
		
		$page = <<<EOS
${matcheResume}
<br />
${returnButton}
<h1> Ajouter un joueur </h1>
<div align="center">
<form method="post" accept-charset="utf-8">
  <fieldset>
		<legend> Ajouter un Joueur </legend>
		<br />
		<label> 
			<span>Licence : </span>
			<input type="text" name="licence" id="licence" class="edit"/>
			&nbsp; &nbsp;
		</label>
		<br />
		<input type="hidden" name="id" value="$id" />
		<input type="hidden" name="action" value="add" />
		<input type="submit" value="Ajouter le joueur" class="edit" />
		
	</fieldset>
</form>
</div>

${resultAction}

<h1> Gérer les joueurs </h1>
${playersForm}

EOS;
		return $page;
	
	}
	
	
}

?>